#!/bin/bash


:<<EOF

    所有x86架构的实现都会在内存中划分堆区和栈区;
    堆区是支持动态内存分配的空间, 由用户自行管理和利用,用于存放程序员设计的对象或者变量数据 ;
    栈区是由系统管理的内存空间 ;  它对程序员开放, 但是不可修改;  它遵循"后进先出"(  Last-In-First-Out, LIFO )的原则, 用于追踪函数的执行顺序以及函数之间的嵌套关系 ;

    执行上下文和调用堆栈密切相关。每个执行上下文对象都包含了函数的词法环境、变量环境、this值等信息，同时还与函数调用栈中的位置相关联。

    在JavaScript中, 函数的调用过程涉及以下几个步骤：
    当一个函数被调用时, JavaScript引擎会创建一个新的执行上下文对象, 并将其推入调用堆栈的顶部。
    执行上下文对象中包含了函数的参数、局部变量和其他必要的信息;
    函数开始执行, JavaScript引擎按照定义的顺序逐行执行函数内的代码。
    如果函数内部调用了其他函数，那么新的执行上下文对象会被创建并推入调用堆栈。
    当一个函数执行完成后，对应的执行上下文对象会从调用堆栈中弹出，将控制权交给上一个调用的函数。
    这样, JavaScript引擎就能够跟踪函数调用的顺序和嵌套关系, 并正确地执行和管理函数的执行过程。

    Shell is  similar to  JavaScript ;


    FUNCNAME 是一个数组 ,  但是bash中会将它维护成类似一个堆栈的形式 ,    在C/C++中 ,  __FUNCTION__常量记录当前函数的名称 ;
    BASH_LINENO 是一个数组 ,  但是bash中会将它维护成类似一个堆栈的形式 ,  记录着 堆栈对应的行号 ;


EOF

script_path=$(dirname "$0")
script_path="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

func1=$script_path"/""func1.sh"
source  "$func1"

func1
